package com.shujia.intercepter;

import org.apache.flume.Context;
import org.apache.flume.Event;
import org.apache.flume.interceptor.Interceptor;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class CustomInterceptor implements Interceptor {
    @Override
    public void initialize() {
        /**
         *  该方法是做初始化的，如果需要与其他的组件连接，可以在这个内部创建连接对象
         *  如果没有连接对象需要创建，则这个方法方法体可以不写任何语句
         */

    }

    /**
     *  重点要实现的方法，处理一个Event,根据body中的数据内容，设置headers中的键值对
     *  需求：内容是否包含shujia
     * @param event source源接收到的数据，封装后的Event对象，包含了headers和body
     * @return Event事件本身
     */
    @Override
    public Event intercept(Event event) {
        //默认情况下，一开始source封装的Event中的header是{}
        Map<String, String> headers = event.getHeaders();
        //取出body内容值，判断是否包含shujia
        String info = new String(event.getBody());
        if(info.contains("shujia")){
            headers.put("title","sj");
            //如果包含，在该Event的headers中设置键值对
            event.setHeaders(headers);
        }else {
            headers.put("title","nsj");
            event.setHeaders(headers);
        }

        return event;
    }

    @Override
    public List<Event> intercept(List<Event> list) {
        for (Event event : list) {
            intercept(event);
        }
        return list;
    }

    @Override
    public void close() {
        /**
         * 释放initialize方法内部创建的连接对象
         */
    }

    public static class MyBuilder implements Builder{

        @Override
        public Interceptor build() {
            return new CustomInterceptor();
        }

        @Override
        public void configure(Context context) {

        }
    }
}
